package com.atguigu.lease.web.app.service.impl;

import com.atguigu.lease.model.entity.*;
import com.atguigu.lease.model.enums.ItemType;
import com.atguigu.lease.web.app.mapper.*;
import com.atguigu.lease.web.app.service.LeaseAgreementService;
import com.atguigu.lease.web.app.vo.agreement.AgreementDetailVo;
import com.atguigu.lease.web.app.vo.agreement.AgreementItemVo;
import com.atguigu.lease.web.app.vo.graph.GraphVo;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @author gqs
 * @description 针对表【lease_agreement(租约信息表)】的数据库操作Service实现
 * @createDate 2023-07-26 11:12:39
 */
@Service
public class LeaseAgreementServiceImpl extends ServiceImpl<LeaseAgreementMapper, LeaseAgreement>
    implements LeaseAgreementService {
  @Autowired private LeaseAgreementMapper leaseAgreementMapper;
  @Autowired private ApartmentInfoMapper apartmentInfoMapper;
  @Autowired private RoomInfoMapper roomInfoMapper;
  @Autowired private GraphInfoMapper graphInfoMapper;
  @Autowired private LeaseTermMapper leaseTermMapper;
  @Autowired private PaymentTypeMapper paymentTypeMapper;

  @Override
  public List<AgreementItemVo> listAgreementItemByPhone(String phone) {
    return leaseAgreementMapper.listAgreementItemByPhone(phone);
  }

  @Override
  public AgreementDetailVo getAgreementDetailById(Long id) {
    // 1.查询租约信息
    LeaseAgreement leaseAgreement = leaseAgreementMapper.selectById(id);
    if (leaseAgreement == null) {
      return null;
    }
    // 2.查询公寓信息
    ApartmentInfo apartmentInfo =
        apartmentInfoMapper.selectApartmentById(leaseAgreement.getApartmentId());

    // 3.查询房间信息
    RoomInfo roomInfo = roomInfoMapper.selectRoomById(leaseAgreement.getRoomId());

    // 4.查询公寓图片
    List<GraphVo> apartmentGraphVoList =
        graphInfoMapper.selectListByItemTypeAndId(
            ItemType.APARTMENT, leaseAgreement.getApartmentId());

    // 5.查询房间图片
    List<GraphVo> roomGraphVoList =
        graphInfoMapper.selectListByItemTypeAndId(ItemType.ROOM, leaseAgreement.getRoomId());

    // 6.查询租期信息
    LeaseTerm leaseTerm = leaseTermMapper.selectLeaseTermById(leaseAgreement.getLeaseTermId());

    // 7.查询支付方式
    PaymentType paymentType =
        paymentTypeMapper.selectPaymentTypeById(leaseAgreement.getPaymentTypeId());

    AgreementDetailVo agreementDetailVo = new AgreementDetailVo();
    BeanUtils.copyProperties(leaseAgreement, agreementDetailVo);
    agreementDetailVo.setApartmentName(apartmentInfo.getName());
    agreementDetailVo.setRoomNumber(roomInfo.getRoomNumber());
    agreementDetailVo.setApartmentGraphVoList(apartmentGraphVoList);
    agreementDetailVo.setRoomGraphVoList(roomGraphVoList);
    agreementDetailVo.setPaymentTypeName(paymentType.getName());
    agreementDetailVo.setLeaseTermMonthCount(leaseTerm.getMonthCount());
    agreementDetailVo.setLeaseTermUnit(leaseTerm.getUnit());

    return agreementDetailVo;
  }
}
